package course;


import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;

import java.text.SimpleDateFormat;
import java.util.Date;

/**处理日期格式、时间格式
 * 处理自定义日期格式：m月d日(通过判断单元格的格式id解决，id的值是58)
 * 结束
 * 看是否为空
 * 返回
 */

/**
 * private static final Object[] EMPTY_ELEMENTDATA = {};
 * 一个空的不可修改的数组
 * private transient Object[] elementData;
 * 这是一个缓存数组
 * ArrayList的长度就等于这个缓冲区数组的长度
 * 一般实际存在数据的长度肯定小于这个缓冲区数组的长度
 * 当第一个数据被添加进来的时候如果elementData==EMPTY_ELEMENTDATA （就是上面那个空的数组）
 * 就是为空时，elementData的长度被扩充成10
 * 还没搞清楚transient的实际作用
 * 应该是节省性能方面的额
 */

public class ExcelUtil {
    public static String getStringCellValue(XSSFCell cell) {
        String cellValue = "";
        if (cell == null) {
            return "";
            //返回
        }
        switch (cell.getCellType()) {
            case STRING:
                cellValue = cell.getStringCellValue();
                break;
            case NUMERIC:
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // 处理日期格式、时间格式

                    SimpleDateFormat sdf = null;
                    //为空

                    /**
                     *if语句(if statement)是指编程语言(包括c语言，C#,VB，汇编语言等)中用来判定所给定的条件是否满足
                     * 根据判定的结果(真或假)决定执行给出的两种操作之一
                      */

                    if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
                        sdf = new SimpleDateFormat("HH:mm");
                    } else
                    /**
                     * else
                     * 也就是当条件先满足if
                     * 如果没有满足这个条件的情况下则去判断是否满足else
                     * 你可以理解成单项判断
                     * 也就是“或者”的关系，
                     * 当你判断条件的时候需要满足if或者else
                     * 当然这里else可以有多个。
                     */
                    {
                        // 日期
                        sdf = new SimpleDateFormat("yyyy-MM-dd");
                    }
                    Date date = cell.getDateCellValue();
                    cellValue = sdf.format(date);

                } else if (cell.getCellStyle().getDataFormat() == 58) {
// 处理自定义日期格式：m月d日(通过判断单元格的格式id解决，id的值是58)

                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

                    double value = cell.getNumericCellValue();

                    Date date = org.apache.poi.ss.usermodel.DateUtil
                            //数据

                            .getJavaDate(value);

                    cellValue = sdf.format(date);
                } else {
                    cellValue = String.valueOf((int) cell.getNumericCellValue());
                }
//                cellValue = new DecimalFormat("yyyy-MM-dd").format(new Date((long)cell.getNumericCellValue()));
                break;
                //结束
            case BOOLEAN:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
                //结束
            default:
                cellValue = "";
                break;
                //结束
        }
        return cellValue;
        //返回
    }
}

